#define  _CRT_SECURE_NO_WARNINGS 1
//#include<iostream>
//#include<cstring>
//#include<algorithm>
//#include<vector>
//
//
//using namespace std;
//
//int f[222];
//struct edge {
//	int srcV, destV, weight;
//	friend bool operator<(edge e1, edge e2) { return e1.weight < e2.weight; }
//};
//vector<edge>edges;
//int n;
//int find(int x)
//{
//	return f[x] < 0 ? x : (f[x] = find(f[x]));;
//}
//bool mer(int x, int y)
//{
//	int rx = find(x); int ry = find(y);
//	if (rx != ry) {
//
//		f[rx] += f[ry];
//		f[ry] = rx;
//		return true;
//	}
//	return false;
//}
//int kruscal()
//{
//	memset(f, -1, sizeof(f));
//	sort(edges.begin(), edges.end());
//	int totalWeight = 0;
//	for (int i = 0; i < edges.size(); i++)
//	{
//		edge e = edges[i];
//		if (mer(e.srcV, e.destV))
//		{
//			totalWeight += e.weight;
//		}
//	}
//	return totalWeight;
//}
//int main()
//{
//	cin >> n;
//	for (int i = 1; i <= n - 1; i++)
//	{
//		char x; int m; cin >> x >> m;
//		while (m--)
//		{
//			char y; int  w; cin >> y >> w;
//			edges.push_back(edge{ x,y,w });
//		}
//	}
//	cout << kruscal() << endl;;
//
//	return 0;
//}





#include <iostream>
#include <queue>
using namespace std;

int main() {
    int N, n, tmp;
    cin >> N;
    while (N--) {
        cin >> n;
        priority_queue<int, vector<int>, greater<int> > q;
        int rst = 0, x, y;
        for (int i = 0; i < n; i++) {
            cin >> tmp;
            q.push(tmp);
        }
        while (q.size() > 1) {
            x = q.top(); q.pop();
            y = q.top(); q.pop();
            rst += (x + y);
            q.push(x + y);
        }
        cout << rst << endl;
    }
    return 0;
}
